//
//  VistaTiendas.m
//  ProyectoMoviTiendas
//
//  Created by Daniel Paez on 3/27/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "VistaTiendas.h"
#import "Barrio.h"
#import "Tienda.h"
#import "CeldaTiendaCell.h"
#import "VistaInfoTienda.h"
#import "MoviTiendas.h"
#import "CategoriaTienda.h"
#import "VistaCategoriasTienda.h"
#import "SubcategoriaTienda.h"
#import "Comunicacion.h"

@interface VistaTiendas ()
{
    NSMutableArray * tiendasSeleccionadas;
    Tienda * tiendaDetalles;
    MoviTiendas * principal;
}
@end

@implementation VistaTiendas
@synthesize btnBuscar;
@synthesize barrios;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
     principal = [MoviTiendas darInstancia];
    tiendasSeleccionadas = [[NSMutableArray alloc] init];
            btnBuscar.enabled = NO;
    
    for (Barrio * bar in barrios)
    {
        [bar cargarTiendas];
    }
    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;
 
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void)viewDidUnload
{

    [self setBtnBuscar:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

-(void)viewWillAppear:(BOOL)animated
{
    [self.tableView reloadData];    
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    // Returns the number of sections.
    return barrios.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    // Returns the number of rows in the section.
    Barrio * actual = [barrios objectAtIndex:section];
    return [actual.tiendas count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"celda";
    CeldaTiendaCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!cell)
    {
        cell = [[CeldaTiendaCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    }
    
    Barrio * primerBarrio = [barrios objectAtIndex:0];
    
    NSString * nombreBarrioFav = principal.cliente.favoritas.nombre;
    if ([nombreBarrioFav isEqualToString:primerBarrio.nombre])
    {

            Barrio * barrio = [barrios objectAtIndex: [indexPath section]];
            Tienda * tienda = [barrio.tiendas objectAtIndex:indexPath.row];
            if(![primerBarrio.tiendas containsObject:tienda] || [barrio.nombre isEqualToString:nombreBarrioFav])
            {
                cell.lblTienda.text = tienda.nombre;
                cell.tienda = tienda;
                if(![tiendasSeleccionadas containsObject:tienda])
                {
                     cell.imagen.hidden = YES;
                }
                cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
            }
            else
            {
                cell.lblTienda.text = nil;    
                cell.imagen.hidden = YES;
                cell.tienda = tienda;
                cell.accessoryType = UITableViewCellAccessoryNone;
            }
        
    }
    else {
          Barrio * actual = [barrios objectAtIndex:[indexPath section]];
          Tienda * tienda = [actual.tiendas objectAtIndex:[indexPath row]];
           cell.lblTienda.text = tienda.nombre;
           cell.tienda = tienda;
        if(![tiendasSeleccionadas containsObject:tienda])
        {
            cell.imagen.hidden = YES;
        }
    }

    
   
    
    return cell;
}

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

- (void) tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    CeldaTiendaCell * celda = [tableView cellForRowAtIndexPath:indexPath];
    tiendaDetalles = celda.tienda;
    [self performSegueWithIdentifier:@"verInfoTienda" sender:self];
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   
    CeldaTiendaCell * celda = [tableView cellForRowAtIndexPath:indexPath];
    //Si no ha escogido el barrio
    if([celda.imagen isHidden])
    {
        celda.imagen.hidden = NO;
        [tiendasSeleccionadas addObject:celda.tienda];
    }
    else
    {
        celda.imagen.hidden = YES;
        [tiendasSeleccionadas removeObject:celda.tienda];
    }
    if ([tiendasSeleccionadas count])
    {
        btnBuscar.enabled = YES;
    }
    else {
        btnBuscar.enabled = NO;
    }

}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{
    Barrio * actual = [barrios objectAtIndex:section];
    
    return actual.nombre;
}


-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSString * identificador = segue.identifier;
    if([@"verInfoTienda" isEqualToString:identificador])
    {
        VistaInfoTienda * vista = [segue destinationViewController];
        vista.tienda = tiendaDetalles;
        vista.title = tiendaDetalles.nombre;
    }
    else
    {
        
        // Combina las categorias de las diferentes tiendas
        NSMutableArray * categorias = [[NSMutableArray alloc] init];
        CategoriaTienda * cate;
        for (Tienda * tienda in tiendasSeleccionadas) 
        {
            
            [Comunicacion cargarCategoriasDeTienda:tienda];
            BOOL encontro = NO;
             
            for (CategoriaTienda * cateTienda in tienda.categorias) 
            {
                [Comunicacion cargarSubcategoriasDeCategoria:cateTienda conTienda:tienda];
                for (SubcategoriaTienda * s in cateTienda.subcategorias)
                {
                    [Comunicacion cargarItemsDeSubcategoria:s conTienda:tienda];
                }
               

                for (int i =0; i < categorias.count && !encontro; i++) 
                {
                    cate = [categorias objectAtIndex:i];
                    
                                        
                    if( [cate.nombre isEqualToString:cateTienda.nombre])
                    {
                        encontro = YES;
                        
                        for (SubcategoriaTienda * subc in cateTienda.subcategorias) {
                            [cate.subcategorias addObject:[subc darCopiaDeSubcategoria]];
                        }

                       // [cate.subcategorias addObjectsFromArray:cateTienda.subcategorias];
                        
                     //   [cate combinarSubcategorias:cateTienda.subcategorias];
                    }
                }
                
                if(!encontro)
                {
                    cate = [[CategoriaTienda alloc] init];
                    cate.nombre = cateTienda.nombre;
                    cate.subcategorias = [[NSMutableArray alloc] initWithCapacity:cateTienda.subcategorias.count];
                    
                    for (SubcategoriaTienda * subc in cateTienda.subcategorias) {
                        [cate.subcategorias addObject:[subc darCopiaDeSubcategoria]];
                    }
                    [categorias addObject:cate];
                }
                encontro = NO;
            }
        }
        
        //Se combinan las diferentes subcategorias de las categorias
        /*
        for (CategoriaTienda * catego in categorias) 
        {
            [catego normalizarSubcategorias];
        }*/
        
        VistaCategoriasTienda * vista = segue.destinationViewController;
        vista.categorias = categorias;
        
    }
}




- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    Barrio * primerBarrio = [barrios objectAtIndex:0];
    
    if ([principal.cliente.favoritas.nombre isEqualToString:primerBarrio.nombre])
    {
          Barrio * barrio = [barrios objectAtIndex: [indexPath section]];
        
        // NSLog(@"Posicion del barrio es:  %d",indexPath.row);
        if([indexPath section] != 0)
        {
          
            Tienda * tienda = [barrio.tiendas objectAtIndex:indexPath.row];
            if([primerBarrio.tiendas containsObject:tienda])
            {
                return 0.1;
            }
        }
        
    }
    return 50;
    
}



@end
